import router from '@/router'
import { useAppStore } from '@/stores/appStore'
import { ElMessage } from 'element-plus'

// 白名单路由，不需要权限验证
const whiteList = ['/login', '/auth-redirect', '/accept-invitation']

router.beforeEach(async (to, from, next) => {
  // 获取应用状态存储
  const appStore = useAppStore()
  
  // 设置页面标题
  document.title = to.meta.title ? `${to.meta.title} - 小采灵犀智能对账系统` : '小采灵犀智能对账系统'
  
  // 检查是否有token
  const hasToken = appStore.token
  
  if (hasToken) {
    if (to.path === '/login') {
      // 已登录则重定向到首页
      next({ path: '/' })
    } else {
      // 检查用户是否存在
      const hasUser = appStore.user
      if (hasUser) {
        // 检查是否已加载用户组织信息
        if (appStore.userOrganizations.length === 0) {
          try {
            // 加载用户组织信息
            await appStore.loadUserOrganizations()
          } catch (error) {
            console.error('加载用户组织信息失败:', error)
          }
        }
        next()
      } else {
        try {
          // 获取用户信息
          const userInfo = await appStore.getUserInfo()
          if (userInfo) {
            // 加载用户组织信息
            try {
              await appStore.loadUserOrganizations()
            } catch (error) {
              console.error('加载用户组织信息失败:', error)
            }
            next()
          } else {
            // 获取用户信息失败，但token存在，可能是因为后端问题
            // 允许访问页面，让页面自己处理错误
            next()
          }
        } catch (error) {
          console.error('获取用户信息失败:', error)
          // 获取用户信息失败，但token存在
          // 不清除token，允许访问页面，让页面自己处理错误
          next()
        }
      }
    }
  } else {
    // 没有token
    if (whiteList.indexOf(to.path) !== -1) {
      // 在免登录白名单，直接进入
      next()
    } else {
      // 其他页面需要登录
      next(`/login?redirect=${to.path}`)
    }
  }
})